/**
 * 简单的加密最后会给参数添加一个生成的checkcode属性
 * checkcode和时间戳有关，所以加密端和解密端必须时间一致
 * @param {*} jsonObj json参数
 * @param {*} salt 加盐
 */
export function encrypt(jsonObj, salt) {
	let str = JSON.stringify(jsonObj);
	str = str.replace(/[\s]/g, "").replaceAll('\\n', "").replaceAll('\\t', "").replaceAll('\\r', "") + salt;
	let code = 0;
	for (let index = 0; index < str.length; index++) {
		const element = str[index];
		code += element.charCodeAt() * Math.pow(index, 2);
	}
	jsonObj.checkcode = code + new Date().getTime();
}


/**
 * 判断数据是否验证通过,数据被加密后小于等于有效时间;
 * 注意这里会改变原对象的checkcode
 * @param {*} jsonObj 需要校验的对象
 * @param {*} salt 加盐
 * @param {*} expire 数据被加密后的有效时间
 * @returns 
 */
export function isDecryptPassed(jsonObj, salt, expire = 20000) {
	let temp = JSON.parse(JSON.stringify(jsonObj));
	delete temp.checkcode;
	encrypt(temp, salt);
	return jsonObj.checkcode <= temp.checkcode && temp.checkcode - jsonObj.checkcode <= expire
}

export default {
	encrypt,
	isDecryptPassed
}